Oishi Masakuni
2016-12-05LINE Software Engineer
こんにちは。LINEでAndroid Clientを開発しているMasakuniです。
これはLINE Advent Calendar 2016の4日目の記事となります。
LINEのアプリ・サービスは多くの国で使われているため、国際化や多言語化はサービス開発時における重大なテーマの一つです。 今回は、その中でも「大文字・小文字変換」について話をします。
Javaにおける String#toLowerCase() / toUpperCase() の挙動
まずは一つ、問題を出してみましょう。
Q. 以下のJavaテストコードは常にpassすることが保証されているでしょうか?
assertEquals("i", "I".toLowerCase());
A. No.
一見単純なテストコードですが、これはJavaの実行環境によっては失敗することがあります。何故かと言うと、 "I".toLowerCase() は "I".toLowerCase(Locale.getDefault()) と等価であり、実行環境のデフォルトロケールによって動作が変わるからです。
具体的には、ロケールがトルコ語("